/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sp2p.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 *
 * @author aline
 */
public class SendViaTCP {

    public void enviarArquivo(String diretorioMaisArquivo, ServerSocket servidor, Socket cliente, BufferedReader entradaTexto) {
        try {
            long recv = 0;
            long total = Long.parseLong(entradaTexto.readLine());
            // fecha canal modo texto
            entradaTexto.close();
            // abre canal binario
            BufferedInputStream entradaBin = new BufferedInputStream(cliente.getInputStream());
            // abre arquivo para dados transferidos
            BufferedOutputStream arquivo = new BufferedOutputStream(new FileOutputStream(diretorioMaisArquivo));
            System.out.println("ENVIANDO ARQUIVO: ");
            while (recv + 256 < total) {
                // cria array para bloco
                byte dados[] = new byte[256];
                // le bloco
                entradaBin.read(dados, 0, 256);
                // grava bloco
                arquivo.write(dados, 0, 256);
                // totaliza blocos
                recv += 256;
            }
            if (recv < total) {
                int fim = (int) (total - recv);
                // cria array para bloco final
                byte dados[] = new byte[fim];
                // le bloco final
                entradaBin.read(dados, 0, fim);
                // grava bloco final
                arquivo.write(dados, 0, fim);
            }
            // fecha canal binario
            entradaBin.close();
            // fecha arquivo
            arquivo.close();
            System.out.println("[" + total + " bytes recebidos]");
            // fecha conexao
            cliente.close();
            System.out.println("[Conexao encerrada]");
        } catch (Exception e) {
            System.out.println("Erro!\n");
            e.printStackTrace();
        }
    }
}
